package 剑指专题.队列栈;


/*
 * Author：江松
 * Date：2023/3/27 10:29
 *
 单词翻转序列：
1,利用栈的翻转性
2，两次翻转：
第一次全部翻转，那么全部逆序了
第二次翻转局部单词，让单词正序
 */

import java.util.Stack;

public class Main4 {
    //字符交换函数
    private void swap(char [] c, int l, int h){
        char temp = c[l];
        c[l] = c[h];
        c[h] = temp;
    }
    //字符交换函数
    //字符串反转函数
    private void reverse(char [] c, int l, int h){
        //双指针反转
        while(l < h)
            swap(c, l++, h--);
    }
    public String ReverseSentence(String str) {
        int n = str.length();
        char[] c = str.toCharArray();
        //第一次整体反转
        reverse(c, 0, n - 1);
        for(int i = 0; i < n; i++){
            int j = i;
            //以空格为界找到一个单词
            while(j < n && c[j] != ' ')
                j++;
            //将这个单词反转
            reverse(c, i, j - 1);
            i = j;
        }
        return new String(c);
    }
    /*
    public String ReverseSentence(String str) {
        if(str==null||str.length()<1)return "";
        Stack<String>stack=new Stack<>();
        String s[]=str.split(" ");
        for(String t:s){
            stack.push(t);
        }
        StringBuilder sb=new StringBuilder();
        while(!stack.isEmpty()){
            if(stack.size()==1){
                sb.append(stack.pop());
            }else{
                sb.append(stack.pop()+" ");
            }
        }
        return sb.toString();
    }
    */


}
